草庐IT

c++ - QML Qt openUrlExternally

全部标签

c++ - 转义(\)字符背后的魔法是什么

C/C++编译器如何操作源代码中的转义字符["\"]?如何编写用于处理该字符的编译器语法?遇到那个字符后,编译器会做什么? 最佳答案 大多数编译器分为几个部分:编译器前端称为lexicalanalyzer或扫描仪。编译器的这一部分读取实际字符并创建标记。它有一个状态机,在看到转义字符时决定它是真实的(例如,当它出现在字符串中时)还是修改下一个字符。token相应地作为转义字符或一些其他token(例如制表符或换行符)输出到编译器的下一部分(theparser)。状态机可以将几个字符组合成一个token。

C++:返回 C 字符串的最快方法

我有一个简单的函数,它接受一个字符并返回一个字符串,在C中它看起来像;char*get_string(charc){switch(c){case'A':return"somestring";Case'B':return"someotherstring";...它工作正常,但后来我希望我的代码在C++中工作,而C++编译器抛出大量“不推荐使用的从字符串常量到‘char*’的转换”。我理解这个警告,但我不是100%确定什么是实现该函数的最佳方法,以便它可以在C和C++上快速运行。这个函数被调用了很多,这是一个重要的瓶颈,所以它必须要快。我最好的尝试是;char*get_string(cha

c++ - 标准 C 函数 : Check for -1 or 0?

许多标准的C和POSIX函数在错误时返回-1,在成功时返回0,例如truncate,fflush,msync等intret=truncate("/some/file",42);使用ret!=-1或ret==0检查是否成功更好,为什么?我的想法根据我的经验,大多数人会检查错误情况(ret!=-1),因为通常只有一个(考虑返回NULL或的函数>EOF错误)。然而事后看来,这些函数可以从直接返回errno中获益(其中0被认为没有错误)。还有一个担心是函数返回的不是0或-1,或者稍后添加了额外的返回值。在这些情况下,测试指示成功的“最严格”值范围是有意义的(ret==0)。更新0我的假设是人们

c++ - 转到无法执行的代码行

我一直被教导几乎从不在编程中使用goto语句。但是,作为我最近的编程项目的一部分,我们必须这样做。我有一个带有各种goto语句的if/else语句,并且goto语句无法执行。我不知道为什么。任何帮助将不胜感激。intmyInt=XXXXXXX;if((myInt>>22)&7==X)gotoa;elseif((myInt>>22)&7==Y)gotob;elseif((myInt>>22)&7==Z)gotoc;a:printf("thisalwaysexecutes\n");gotoend;b:printf("thisneverexecutes\n");gotoend;c:print

c++ - 在 C 中使用 printf 等效于 C++ std::setprecision(20)

我想以十进制表示法完全精确地打印double(但数字末尾没有额外的零)。在C++中,我可以使用:std::setprecision(20);cout使用printf的等效C代码是什么? 最佳答案 您可以使用“%.20g”说明符。g恕我直言,通常比f好,因为它不打印尾随零,并且明智地处理大/小值(更改为e格式)。另请注意,使用“g”说明符时,精度(在本例中为“20”)指定有效位数而不是小数点后的位数。 关于c++-在C中使用printf等效于C++std::setprecision(20)

c++ - 如何使用 ANSI Escape 代码在控制台上输出彩色文本

我读到了ANSI-C转义码here.尝试在C/C++printf/cout中使用它来为输出到consolde的文本着色,但没有成功。代码:#include#includeintmain(){inta=3,b=5;int&ref=a;ref=b;//cout如何使用这些转义码将彩色文本输出到控制台?我错过了什么吗?编辑:在一些C++代码中,我看到了对这个函数的调用textcolor(10);但它在g++和VisualStudio中给出了编译错误。哪个编译器有这个功能?有详细信息吗? 最佳答案 恐怕你忘记了ESC字符:#includei

c++ - 仅 header 链接

许多C++项目(例如,许多Boost库)是“仅header链接”。在普通C中这也可能吗?如何将源代码放入标题中?有没有关于它的网站? 最佳答案 执行摘要:可以,但不应该。C和C++代码在编译之前被预处理:所有header都被递归地“粘贴”到包含它们的源文件中。如果您在头文件中定义了一个函数,并且它被两个C文件包含,那么您将在每个目标文件中得到两个拷贝(OneDefinitionRule违规)。如果您的所有函数都标记为static,即在翻译单元外不可见,则您可以创建“仅header”C库。但这也意味着您将获得包含头文件的每个翻译单元中

c++ - 此 C/C++ if() 语句的计算结果是否为 TRUE?

根据PC-lint,以下语句永远不会TRUE:if((variable&0x02)==1)我正在为嵌入式系统使用C编译器,只要设置了variable中的相应位,它就会将其评估为TRUE。我猜编译器正在对==的两侧进行TRUE/FALSE比较,而不是比较结果数字。换句话说,每当表达式(varable&0x02)不为零(即TRUE)时,语句也将为TRUE,因为值1也是TRUE(不是零)。我不知道C/C++标准是否明确定义了编译器在这种情况下的行为方式。有没有C/C++专家可以根据标准(例如C90、C99等)回答这个问题?P.S.:在上面的语句中,“variable”是一个unsignedc

c++ - 使用#pragma 优化的代码的可移植性如何?

使用#pragmaoptimize的代码的可移植性如何?大多数编译器都支持它吗?对此#pragma的支持有多完整? 最佳答案 #pragma是编译器添加非认可和不可移植语言扩展的认可和可移植方式*.基本上,您永远无法确定,并且至少有一个主要的C++编译器(g++)不按原样支持此pragma。*:来自C++标准(N3242):16.6Pragmadirective[cpp.pragma]Apreprocessingdirectiveoftheform#pragmapp-tokensoptnew-linecausestheimpleme

c++ - 为什么 isdigit() 如果为真则返回 2048?

谁能解释为什么isdigit返回2048如果为真?我是ctype.h库的新手。#include#includeintmain(){charc='9';printf("%d",isdigit(c));return0;} 最佳答案 因为这是允许的。C99标准只说明了isdigit、isalpha等:Thefunctionsinthissubclausereturnnonzero(true)ifandonlyifthevalueoftheargumentcconformstothatinthedescriptionofthefunctio